package d1_byte_stream;

import java.io.FileInputStream;
import java.io.InputStream;

public class FileInputStreamDemo02 {
    public static void main(String[] args) throws Exception {
        //目标: 掌握文件字节输入流每次读取多个字节

        //1、创建一个文件字节输入流管道与源文件接通
        InputStream is = new FileInputStream("javapromax\\day09-charset-io\\src\\陈平安02.txt");


        /*//2、每次读取一个字节数组的字节, 会返回读取的字节个数, 没有字节可读返回-1:
        //public int read(byte[] buffer)
        byte[] buffer = new byte[3];//这个字节数组就是一个桶 其实就是一个一个桶的读
        int len1 = is.read(buffer);// 将读取到的内容放到一个字节数组中
        //使用String的构造器进行解码
        System.out.println("内容是: " + new String(buffer));
        System.out.println("读取的内容: " + len1);


        //第二桶   IO流是完整的水流模型
        //解释
        // 第一桶: buffer = [c,9,0]
        // 第一桶: buffer = [a,b,0]
        //第二次进行读取的时候,会将第一桶的进行覆盖,但是读到b的时候后面是没有字节了, 所以0会进行保留

        int len2 = is.read(buffer);// 将读取到的内容放到一个字节数组中
        //使用String的构造器进行解码
        //规范: 读取多少,就倒出多少
                                                        //   0: 代表从桶的底部开始
                                                        // len2 : 就代表 读取多少就倒出多少
        System.out.println("内容是: " + new String(buffer, 0, len2));
        System.out.println("读取的内容: " + len2);

        int len3 = is.read(buffer);// 将读取到的内容放到一个字节数组中
        //使用String的构造器进行解码
        System.out.println("内容是: " + new String(buffer));
        System.out.println("读取的内容: " + len3);//-1 证明没有了*/


        //3、进行循环改进
        byte[] buffer1 = new byte[3];
        int len;//防止之后一个桶多倒
        while((len = is.read(buffer1)) != -1){ //这个等于-1 都不会进来
//            System.out.println("内容" +len);
            System.out.print(new String(buffer1, 0, len));//文本内容自带换行 (这个意思是: 不同行的文本会换行)

        }

        //拓展:
            //性能比较好
            //缺点: 还是无法避免汉字输出乱码的问题
        //把字节读出来, 然后再往其他地方进行转移 (就是做复制)


        //这个代码,在开发中还是会会用的,只是读取汉字会出现问题而已, 但是做复制还是可以的
        is.close();
    }
}
